package jp.ac.u_tokyo.dch.service;

import java.util.List;

import jp.ac.u_tokyo.dch.core.db.DBConnection;
import jp.ac.u_tokyo.dch.core.exceptions.DBException;
import jp.ac.u_tokyo.dch.dao.user.UserGroupDao;
import jp.ac.u_tokyo.dch.dao.user.UserGroupInfoDao;
import jp.ac.u_tokyo.dch.model.db.User;
import jp.ac.u_tokyo.dch.model.db.UserGroup;

public class UserGroupService {


	/**
	* DBコネクションオブジェクト
	 */
	private DBConnection dbconn = null;


	/**
	 * オブジェクト生成者
	 * @param dbconn
	 */
	public UserGroupService(DBConnection dbconn){
		this.dbconn = dbconn;
	}

	/**
	 * データスキーマリストを取得する
	 * @param sort 分類
	 * @return データスキーマリスト
	 * @throws DBException 例外
	 */
	public List<UserGroup> getList() throws DBException {

		UserGroupDao userGroupDao = new UserGroupDao(dbconn);

		return userGroupDao.selectAll();
	}

	/**
	 * ユーザグループ情報を取得する
	 * @param id
	 * @return ユーザグループ
	 * @throws DBException 例外
	 */
	public UserGroup selectUserGroup(String id) throws DBException {

		UserGroupDao userGroupDao = new UserGroupDao(dbconn);

		return userGroupDao.selectById(id);
	}

	/**
	 * グループに所属するユーザリストを取得する
	 * @param グループid
	 * @return ユーザリスト
	 * @throws DBException 例外
	 */
	public List<User> selectUserList(String id) throws DBException {

		UserGroupInfoDao UserGroupInfoDao = new UserGroupInfoDao(dbconn);

		return UserGroupInfoDao.selectByGroupId(id);
	}

	/**
	 * ID重複チェック
	 * @param id グループID
	 * @return true : 存在する、false：存在しない
	 * @throws DBException 例外
	 */
	public boolean isExistsId(String id) throws DBException {

		UserGroupDao userGroupDao = new UserGroupDao(dbconn);
		return userGroupDao.checkId(id);
	}

	/**
	 * 挿入する
	 * @param group グループ情報
	 * @return 挿入件数
	 * @throws DBException 例外
	 */
	public int insert(UserGroup group) throws DBException {
		UserGroupDao userGroupDao = new UserGroupDao(dbconn);
		return userGroupDao.insert(group);
	}

	/**
	 *
	 * @param group
	 * @return
	 * @throws DBException
	 */
	public int update(UserGroup group) throws DBException {
		UserGroupDao userGroupDao = new UserGroupDao(dbconn);
		return userGroupDao.update(group);
	}

	/**
	 *
	 * @param group
	 * @return
	 * @throws DBException
	 */
	public int delete(UserGroup group) throws DBException {
		UserGroupDao userGroupDao = new UserGroupDao(dbconn);
		UserGroupInfoDao userGroupInfoDao = new UserGroupInfoDao(dbconn);
		userGroupInfoDao.deleteByGroupId(group.getId());
		return userGroupDao.delete(group);
	}
}
